import Vue from 'vue'

/**
 * 匹配电话号码
 * 15012341234 => 150****1234
 */
Vue.filter('starPhone', (value) => {
    if (!value) return '';
    return value.toString().replace(/^(\d{3})(\d{4})(\d{4})/g, '$1****$3')
})
/**
 * 匹配名字
 * 王仙女 => 王*女
 */
Vue.filter('starName', (value) => {
    if (!value) return '';
    return value.toString().replace(/^([^\x00-\xff])([^\x00-\xff]{0,})([^\x00-\xff])/g, '$1*$3')
})

/**
 * 时间统一格式化,dateFormat('yyyy-MM-dd hh:mm:ss')}
 * @param {Object} value
 * @param {Object} fmt
 */
Vue.filter('dateFormat', (value, fmt) => {
    if (!value) {
        return '';
    }
    if (typeof(value) == 'string') {
        value = value.replace(/-/g, '/').replace(/T/g, ' ').replace(/.[\d]{3}Z/, ' ');
    }
    let getDate = new Date(value);
    let o = {
        'M+': getDate.getMonth() + 1,
        'd+': getDate.getDate(),
        'h+': getDate.getHours(),
        'm+': getDate.getMinutes(),
        's+': getDate.getSeconds(),
        'q+': Math.floor((getDate.getMonth() + 3) / 3),
        'S': getDate.getMilliseconds()
    };
    if (/(y+)/.test(fmt)) {
        fmt = fmt.replace(RegExp.$1, (getDate.getFullYear() + '').substr(4 - RegExp.$1.length))
    }
    for (let k in o) {
        if (new RegExp('(' + k + ')').test(fmt)) {
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k])
                .length)))
        }
    }
    return fmt;
})
/**
 * 将 "时间戳" 转换为 "年月日时分秒" 的格式,dateFormatChinese('年月日时分秒')}
 * @param {Object} value
 * @param {Object} fmt
 */
Vue.filter('dateFormatChinese', (value, fmt) => {
    if (!value) {
        return '';
    }
    if (typeof(value) == 'string') {
        value = value.replace(/-/g, '/').replace(/T/g, ' ').replace(/.[\d]{3}Z/, ' ');
    }
    let getDate = new Date(value);
    let o = {
        '年': getDate.getFullYear(),
        '月': getDate.getMonth() + 1,
        '日': getDate.getDate(),
        '时': getDate.getHours(),
        '分': getDate.getMinutes(),
        '秒': getDate.getSeconds()
    };
    for (let k in o) {
        if (new RegExp(`(${k})`).test(fmt)) {
            let str = o[k] + k;
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : padLeftZero(str));
        }
    }
    return fmt;
})
/**
 * 将秒解析成时间格式
 * YYYY  MM dd HH mm ss
 */
Vue.filter('countdown', (value, fmt) => {
    let hr = parseInt(value / 60 / 60 % 24)
    let min = parseInt(value / 60 % 60)
    let sec = parseInt(value % 60)
    hr = hr > 9 ? hr : '0' + hr
    min = min > 9 ? min : '0' + min
    sec = sec > 9 ? sec : '0' + sec
    return `${hr}:${min}:${sec}`
})

/**
 * 空对象处理
 * YYYY  MM dd HH mm ss
 */
Vue.filter('empty', (value, def) => {
    if (isEmptyString(value)) {
        return def;
    }
    return value.trim();
})

/**
 * 格式化数字
 * @param {Object} value
 * @param {Object} num
 */
Vue.filter('toFixed', function(value, num) {
    if (!num) {
        //默认2位小数
        num = 2;
    }
    if (!value) {
        value = 0;
        return value.toFixed(num);
    }
    if (typeof(value) == "number") {
        return value.toFixed(num);
    }
    return value;
});
/**
 * 动态处理缩略图，居中短边裁剪
 * @param {Object} value
 * @param {Object} fmt 宽x高 200x200
 */
Vue.filter('thumbImg', (value, fmt) => {

    if (!value) {
        return "/static/images/errorImage.jpg"
    }
    //检查value中是否包含阿里云oss
    if (value.indexOf('x-oss-process') >= 0 || value.indexOf('nonires.chinanoni.com') >= 0) {
        return value;
    }
    if (!fmt) {
        fmt = "200*200";
    }

    fmt = fmt.toLowerCase();
    let wh = fmt.split("*");
    if (wh.length == 1) {
        fmt = `w${wh[0]}`;
    } else {
        fmt = `w${wh[0]},h${wh[1]}`;
    }
    return [value, "?process=", fmt].join("");
});
/**
 * 处理头像-若头像为空则返回默认头像
 * @param {String} value
 */
Vue.filter('avatar', (value) => {
    if (!value) {
        return "/static/missing-face.png";
    }
    return value;
});
/**
 * 处理距离单位-m/km
 * @param {Number} value
 */
Vue.filter('formatDistance', (value) => {
    if (!value) {
        return "0m";
    }
    if (value < 1000) {
        return value + "m"
    }
    return value / 1000 + "km";
});
/**
 * 处理数字-
 * @param {Number} value
 */
Vue.filter('formatNumber', (value) => {
    if (!value) {
        return "0";
    }
    if (value < 1000) {
        return value;
    }
    if (value < 10000000) {
        return (value / 10000).toFixed(2) + "w";
    }
    return (value / 100000000).toFixed(2) + "亿";
});
/**
 * 处理数字-
 * @param {Number} value
 */
Vue.filter('formatDate', (date, fmt) => {
    if (!date) {
        return '';
    }
    if (typeof(date) == 'string') {
        date = date.replace(/-/g, '/').replace(/T/g, ' ').replace(/.[\d]{3}Z/, ' ');
    }
    date = new Date(date);
    if (/(y+)/.test(fmt)) {
        fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
    }
    let o = {
        'M+': date.getMonth() + 1,
        'd+': date.getDate(),
        'h+': date.getHours(),
        'm+': date.getMinutes(),
        's+': date.getSeconds()
    };
    for (let k in o) {
        if (new RegExp(`(${k})`).test(fmt)) {
            let str = o[k] + '';
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : ('00' + str).substr(str.length));
        }
    }
    return fmt;
});
/**
 * 处理空值
 */
Vue.filter('formatNull', (value, def = '', unit) => {
    if (value == null) {
        return def;
    } else if (value == undefined) {
        return def;
    } else if (value == '') {
        return def;
    }
    if (unit) {
        return value + unit;
    }
    return value;
});

/**
 * SIM卡供应商
 */
Vue.filter('simsupplier', (value) => {
    if (value == 0) {
        return '中国电信';
    } else if (value == 1) {
        return '中国移动';
    } else {
        return "中国联通";
    }
});
/**
 * 运输方式
 */
Vue.filter('dictionary', (category, value) => {
    if (category == 'DeliveWay') {
        if (value == 1) {
            return '代办运输';
        } else {
            return '自提';
        }
    }
});
/**
 * 数字转汉字-非金额
 */
Vue.filter('tochinese', (val) => {
    let chin = ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十']
    if (val <= 10) {
        return chin[val - 1]
    } else if (val <= 100) {
        if (val < 20) {
            return '十' + chin[(val % 10) - 1]
        } else if (val % 10 === 0) {
            return chin[Math.floor(val / 10) - 1] + '十'
        } else {
            return chin[Math.floor(val / 10) - 1] + '十' + chin[(val % 10) - 1]
        }
    }
});
/**
 * 数字转汉字-非金额
 */
Vue.filter('tomoney', (val) => {
    if (!val) {
        return '0.00';
    }
    if (isNaN(val)) {
        return '0.00';
    }
    let newVal = Math.abs(val);
    let moneyVal = Math.trunc(newVal * 10000);
    let tempNum = Math.ceil(moneyVal / 100);
    let resultVal = (tempNum / 100).toFixed(2);
    return parseFloat(resultVal);
});
